\documentclass[a4paper]{scrartcl}

\usepackage[german]{babel}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{float}
\usepackage{listings}

\setlength{\parindent}{0mm}  % Kein Einzug
\setlength{\parskip}{0.2cm}  % 2mm Abstand zwischen zwei Abs�tzen

\title{PCA Exercise 5}

\author{Heisler Matthias, Lammel Steffen}
\begin{document}
\maketitle

\section{Hitzeverteilung revisited}
\begin{figure}[ht]
\centering
\includegraphics[scale=0.8]{./pca05-1.pdf}
\caption{Skizze der Matrixaufteilung}
\label{fig:skizze}
\end{figure}

Die Abbildung \ref{fig:skizze} skizziert die grundlegende Idee wie die Arbeit auf die Threads verteilt wird. Hierzu wird aus der Anzahl der Threads zun{\"a}chst einmal der "workload" f{\"u}r jeden Thread bestimmt. Dieser "workload" bestimmt die Anzahl der Zeilen, welche durch einen Thread bearbeitet werden. Dabei arbeitet jeder Thread auf der kompletten L{\"a}nge der Matrix.

 An dieser Stelle sei angemerkt, dass zwei Matrizen verwendet werden. Eine Matrix welche die aktuellen Werte f{\"u}r die Berechnung enth{\"u}lt und eine Matrix in welche die Ergebnisse dieser Berechnungen geschrieben werden.
Wurde die Berechnung durch alle Threads abgeschlossen so werden beide Matrizen getauscht. Hierzu müssen die Threads zunächst synchronisiert werden dies geschieht {\"u}ber eine Barrier. Damit sichergestellt werden kann, dass alle Threads ihre Berechnungen abgeschlossen haben. Jedoch folgt durch den Tauschvorgang auch die Notwendigkeit alle Threads zu synchronisieren bevor mit dem nächsten Berechnungsschritt begonnen werden kann.
\clearpage

\section{Hitzeverteilung revisited (Experimente)}
Die in Tabelle \ref{tab:meas} gezeigten Ergebnisse für die gesamte Laufzeit der Programme und die Laufzeit pro Iteration sind jeweils Durchschnittswerte über 100 Ausführungen der sequentiellen und parallelen Versionen der Programme welche im Rahmen dieser Aufgabe erstellt wurden. Die Quelldateien mit dazugeh{\"o}rigen Makefile's sind in den Ordnern "sequentiell" bzw. "parallel" hinterlegt.

Nach dem {\"u}bersetzen der Programme lassen sich beide mit den gleichen Kommandozeilen Parametern aufrufen, wobei beachtet werden sollte, dass das Programm, welches die Threads implementiert, als letzten Parameter die Anzahl der Threads erwartet. Hieraus folgt das folgende Aufrufshema:

\vspace{2mm}
\centerline{./heatdist $<$iterationen$>$ $<$size$>$ $<$heat radius$>$}  \centerline{$<$heat value$>$ $<$no. of threads [nur parallel Version]$>$}

\vspace{2mm}

Die in Tabelle \ref{tab:parameter} enthaltenen Parameter wurden auch so f{\"u}r die sequentielle Version verwendet.

 
\begin{table}[hc]
\begin{tabular}{|l|l|l|l|}
\hline
Parameter & Wert  & Beschreibung  \\
\hline
\hline
$<$iterationen$>$ & 100 & Anzahl der Iterationen\\
\hline
$<$size$>$ & 128 & Gr{\"o}{\ss}e des Hitzebereichs\\
\hline
$<$heat value$>$ & 127 & Temperatur des Bereichs\\
\hline
$<$no. of threads$>$ & variiert & Anzahl der Threads\\
\hline

\end{tabular}
\caption{Verwendete Parameter}
\label{tab:parameter}

\end{table}
\begin{table}[hc]
\begin{tabular}{|l|l|l|l|}
\hline
Threads & Durchschnittslaufzeit  & Durchschnittslaufzeit  & Iterationen/sek\\
 & (gesamt) [Sekunden] & (1 Iteration) [Sekunden] & \\
\hline
\hline
sequentiell & 1.1541315 & 0.0115415 & ca. 86.\\
\hline
1 & 1.42853665 & 0.01125 & ca. 88.\\
\hline
2 & 2.3906645 & 0.0239065 (-107 \%) & ca. 41.\\
\hline
4 & 1.24144165 & 0.004289 (+62 \%) & ca. 233\\
\hline
8 & 1.41581223 &
0.0043945 (+61 \%) & ca. 227\\
\hline
16 & 1.57997581 &
0.025018 (-116 \%)& ca. 39\\
\hline

\end{tabular}
\caption{Zusammenfassung Messungen \tiny{(Mittelung jeweils {\"u}ber 100 Ausführungen)}}
\label{tab:meas}
\end{table}

Ein kurzer Blick in die Tabelle \ref{tab:meas} zeigt das der erreichte Speedup f{\"o}r die gew{\"a}hlte Problemgr{\"o}{\ss}e nur marginal besser ausfällt. In den meisten F{\"a}llen nicht sichtbar hervortritt. Dies l{\"a}sst darauf schlie{\ss}en, dass die vorliegende Implementierung f{\"u}r die gew{\"a}hlte Problemgr{\"o}{\ss}e nicht optimal ist bzw. nicht optimal arbeitet.

Um dies zu {\"u}berpr{\"u}fen zeigt die Abbildung \ref{fig:zwMess} das Laufzeitverhalten f{\"u}r unterschiedliche Problemgr{\"o}{\ss}en. Hierf{\"u}r wurde die Problemgr{\"o}{\ss}e im Bereich von 512 und 8192 variiert. Zu sehen ist hier ein deutlicher Speedup bei Verwendung von mehreren Threads.

\begin{figure}[ht]
\centering
\includegraphics{./result.pdf}
\caption{Variation des Size-Parameters}
\label{fig:zwMess}
\end{figure}

 
\end{document}